1. Field of the Invention
This invention is related to the field of digital systems and, more particularly, to a mechanism for handling cases in which an agent is temporarily unable to participate in a transaction.
2. Description of the Related Art
A bus is frequently used in digital systems to interconnect a variety of devices included in the digital system. Generally, one or more devices are connected to the bus, and use the bus to communicate with other devices connected to the bus. As used herein, the term “agent” refers to a device which is capable of communicating on the bus. The agent may be a requesting agent if the agent is capable of initiating transactions on the bus and may be a responding agent if the agent is capable of responding to a transaction initiated by a requesting agent. A given agent may be capable of being both a requesting agent and a responding agent. Additionally, a “transaction” is a communication on the bus. The transaction may include an address transfer and optionally a data transfer. Transactions may be read transactions (transfers of data from the responding agent to the requesting agent) and write transactions (transfers of data from the requesting agent to the responding agent). Transactions may further include various coherency commands which may or may not involve a transfer of data.
The bus is a shared resource among the agents, and thus a mechanism for determining which agent is permitted to use the bus at any given time is needed. Generally, determining which of several agents is permitted to use the bus (often referred to as “mastering the bus”) is referred to as “arbitration”. An agent desiring to use the bus may signal its request to use the bus, referred to as “arbitrating”. The circuitry for performing arbitration is referred to as an “arbiter”. One or more agents may arbitrate for the bus, and the arbiter determines which of the arbitrating agents is permitted to use the bus. The agent granted use of the bus by the arbiter is referred to as the winner of the arbitration.
The rate at which the bus is able to carry transactions over a period of time is referred to as its bandwidth. Additionally, the bus may have a maximum sustainable bandwidth, which is a measure of the maximum bandwidth if the bus is used in the most efficient manner possible by the devices attached to the bus. The difference between the maximum theoretical bandwidth (which may be a function of bus width, clock frequency, and number of transfers per clock) and the maximum sustainable bandwidth may be due to protocol-related requirements such as, for example, dead cycles between transfers by different devices, limits as to the number of transactions that can be outstanding, etc.
The maximum sustainable bandwidth may not be achievable due to inefficiencies of the devices attached to the bus. For example, if a responding agent is incapable of handling a transaction initiated by a requesting agent, the transaction must somehow be delayed. Many buses employ a retry mechanism to handle such cases, in which the requesting agent initiates the transaction on the bus and the responding agent signals a retry for the transaction. The transaction is cancelled, and the requesting agent may attempt to initiated the transaction again at a later time.
Unfortunately, retry mechanisms make inefficient use of bus bandwidth. Bandwidth used to initiate the transaction each time it is retried is wasted, reducing the effective bus bandwidth. System performance may be reduced if the wasted bandwidth could have been used to perform other transactions. Furthermore, retry mechanisms increase the verification burden and increase the debugging complexity of the system, since the number of scenarios which may occur on the bus is multiplied by the number of times various transactions may be retried.